#pragma once

#ifndef LHJ_CORE_DB_TERMINAL_SQLITE_OILTRANS_SQLITE_H__
#define LHJ_CORE_DB_TERMINAL_SQLITE_OILTRANS_SQLITE_H__

#include "oiltrans.h"
#include <string>
#include <stdint.h>

namespace cores
{
    namespace database
    {
        namespace terminal
        {
            namespace sqlite
            {
                class OilTrans_Sqlite : public OilTrans
                {
                public:
                    OilTrans_Sqlite(const std::string &db_name);
                    virtual ~OilTrans_Sqlite();

                protected:
                    /**
                     * @brief 获取待上传数据列表
                     */
                    virtual std::vector<OilTransaction> getRawTransData(const bool &is_test);

                    /**
                     * @brief 新增一条交易数据
                     */
                    virtual void addOneTransData(const OilTransaction &trans_item);

                    /**
                     * @brief 新增一条交易数据
                     */
                    virtual void addOneTransData(const OilTransaction &trans_item, const uint16_t &serial_num);

                    /**
                     * @brief 更新数据上传状态
                     */
                    virtual void updateTransDataStatus(const std::vector<std::string> &ids, const bool &is_upload);

                    /**
                     * @brief 获取所有设备的流水号
                     */
                    virtual std::vector<SerialNumber> getSerialNumberData();

                    /**
                     * @brief 根据Lora ID和枪号获取设备流水号
                     */
                    virtual std::vector<SerialNumber> getSerialNumberData(const uint16_t &lora_id, const uint8_t &nozzle_code);

                    /**
                     * @brief 新增一条流水号数据
                     */
                    virtual void addSerialNumberRecord(const SerialNumber &item);

                    /**
                     * @brief 更新流水号
                     */
                    virtual void updateSerialNumberRecord(const SerialNumber &item);

                    /**
                     * @brief 获取没有上传的液位仪数据集
                     */
                    virtual std::vector<LlqDataItem> getNoUploadLlqData(const bool &is_test);

                    /**
                     * @brief 新增液位仪数据
                     */
                    virtual void addNewLlqData(const LlqDataItem &item);

                    /**
                     * @brief 更新数据上传状态
                     */
                    virtual void updateLlqDataStatus(const std::vector<std::string> &ids, const bool &is_upload);

                private:
                    std::string _dataBaseName;
                };
            }
        }
    }
}

#endif